<HTML><HEAD><TITLE>locate(+Vars, ++Precision, ++LinLog)</TITLE>
</HEAD><BODY>[ <A HREF="index.html">library(ic)</A> | <A HREF="../../index.html">Reference Manual</A> | <A HREF="../../fullindex.html">Alphabetic Index</A> ]
<H1>locate(+Vars, ++Precision, ++LinLog)</H1>
Locate solution intervals for Vars by splitting and search.
<DL>
<DT><EM>Vars</EM></DT>
<DD>Collection (a la collection_to_list/2) of variables
</DD>
<DT><EM>Precision</EM></DT>
<DD>Minimum required precision (float)
</DD>
<DT><EM>LinLog</EM></DT>
<DD>Domain splitting method (lin or log)
</DD>
</DL>
<H2>Description</H2>
<P>
   Locate solution intervals for the given variables with the required
   precision.  This works well if the problem has a finite number of
   solutions.  locate/2,3 work by nondeterministically splitting the
   intervals of the variables until they are narrower than Precision (in
   either absolute or relative terms).</P><P>

   The LinLog parameter guides the way domains are split.  If it is set to
   <TT>lin</TT> then the split is linear (i.e. the arithmetic mean of the bounds is
   used).  If it is set to <TT>log</TT>, the split is logarithmic (i.e. the geometric
   mean of the bounds is used).  Note that if <TT>log</TT> is used, there will be
   roughly the same number of representable floating point numbers on either
   side of the split, due to the logarithmic distribution of these numbers.</P><P>

   locate/3 is defined in terms of locate/4 as follows:
    <PRE>
    locate(Vars, Precision, LinLog) :- locate(Vars, [], Precision, LinLog).
    </PRE></P>

<H2>See Also</H2>
<A HREF="../../lib/ic/locate-2.html">locate / 2</A>, <A HREF="../../lib/ic/locate-4.html">locate / 4</A>, <A HREF="../../lib/ic/squash-3.html">squash / 3</A>, <A HREF="../../lib/lists/collection_to_list-2.html">lists : collection_to_list / 2</A>
</BODY></HTML>
